// Header Protection
#ifndef _OBJECT_H_
#define _OBJECT_H_

// Include Files
//
//#include "Scene.h"
//
//// systems
//#include "Render\RenderState.h"
//#include "Script\ScriptState.h"

// Forward Declarations
//class CScene;
class CInputNode;
class CPhysicsNode;
class CRenderNode;
class CScriptNode;

// Namespace
namespace IE
{
	/////////////////////////////////////////////////////////////////////////////////
	// A base class from which to derive everything in game.
	class CObject
	{
	public:     // methods
		CObject()
			: m_pInputNode(NULL), m_pPhysicsNode(NULL), 
			m_pRenderNode(NULL), m_pScriptNode(NULL)
		{ }
		~CObject() { }

		void SetInputNode( CInputNode *_pInputNode )
		{
			(void)_pInputNode;
			// TODO
		}

		void SetPhysicsNode( CPhysicsNode *_pPhysicsNode )
		{
			(void)_pPhysicsNode;
			// TODO
		}

		void SetRenderNode( CRenderNode *_pRenderNode )
		{
			(void)_pRenderNode;
			// TODO
		}

		void SetScriptNode( CScriptNode *_pScriptNode )
		{
			(void)_pScriptNode;
			// TODO
		}

		//void SetScriptState( CScriptState *_pScriptState )
		//{
		//	if( m_pScriptState )
		//	{
		//		m_pScene->RemoveScriptState(m_pScriptState);
		//		m_pScriptState->Release();
		//	}
		//	m_pScriptState = _pScriptState;
		//	if( m_pScriptState )
		//	{
		//		m_pScene->AddScriptState(m_pScriptState);
		//		m_pScriptState->AddRef();
		//	}
		//}

		//void SetRenderState( CRenderState *_pRenderState )
		//{
		//	if( m_pRenderState )
		//	{
		//		m_pScene->RemoveRenderState(m_pRenderState);
		//		m_pRenderState->Release();
		//	}
		//	m_pRenderState = _pRenderState;
		//	if( m_pRenderState )
		//	{
		//		m_pScene->AddRenderState(m_pRenderState);
		//		m_pRenderState->AddRef();
		//	}
		//}

	private:    // data
		CInputNode *  m_pInputNode;
		CPhysicsNode *m_pPhysicsNode;
		CRenderNode * m_pRenderNode;
		CScriptNode * m_pScriptNode;

	private:    // dummy definitions
		CObject( CObject const & );
		CObject &operator =( CObject const & );
	};
}

// Header Protection
#endif // _OBJECT_H_
